package com.cskaoyan.javase._1extends._9override;

import com.cskaoyan.javase._1extends._9override.test.OverrideTest;

/**
 * 方法重写的注意事项:
 *      1.父类中所有方法都能够被子类重写吗?
 *          不是
 *          a.私有方法(以及所有子类没有权限的父类方法),虽然可以继承,但是子类没有访问权限,于是不能重写
 *
 *          b.构造器,不能继承,更不谈重写
 *          c.静态方法,静态成员属于类,它们不能继承,也不能重写
 *
 *      2.重写方法时,一定要写注解"@Override"
 *          快速重写父类方法的快捷键:
 *              a.直接在子类类体中,写父类要重写方法的方法名,然后根据提示回车即可
 *              b.alt + insert
 *
 * @since 11:30
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        B.testB();
        BSon.testB();
    }
}

class B {
    private void test() {
    }

    public static void testB() {
        System.out.println("hello B!");
    }
}

class BSon extends B {
    // 独属于BSon的方法
    private void test() {
    }

    // @Override
    public static void testB() {
        System.out.println("hello BSon!");
    }
}

class OverrideTestSon extends OverrideTest {
    // @Override
    void test() {
    }
}

class C{
    void test(){}
    void test2(){}
    void test3(){}
}
class CSon extends C{
    // 快速重写父类方法的快捷键:
    //     a.直接在子类类体中,写父类要重写方法的方法名,然后根据提示回车即可
    //     b.alt + insert

    @Override
    void test() {
        super.test();
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    void test2() {
        super.test2();
    }

    @Override
    void test3() {
        super.test3();
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

    @Override
    public String toString() {
        return super.toString();
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}